package com.cnap.model.schedule;

import cn.hutool.core.text.CharSequenceUtil;
import com.cnap.model.application.ValidInterface;

/**
 * 策略状态
 *
 * @author xc
 **/
public enum StrategyStatusEnum implements ValidInterface {
    /*
    微服务被调度部署至目标节点集群时，会有不同状态的切换
    其中包括AI类应用和大数据类应用。
     */

    // 初始化
    INIT(0, "初始化"),
    // 已启用
    APPLIED(1, "已启用"),
    // 已暂停
    PAUSED(2, "已暂停"),
    // 启动中
    STARTING(3, "启动中"),
    // 删除中
    DELETING(4, "删除中"),
    // 已结束
    FINISHED(5, "已结束"),
    // 彻底删除
    DELETED(6, "删除"),
    // 未知状态
    UNKNOWN(-1, "未知状态"),
    // 失败
    FAILED(7, "失败"),
    // 删除失败
    DELETE_FAILED(8, "删除失败");
    private final int status;
    private final String message;

    StrategyStatusEnum(int status, String message) {
        this.status = status;
        this.message = message;
    }

    /**
     * get
     *
     * @return Status
     */
    public int getStatus() {
        return status;
    }

    /**
     * get
     *
     * @return Message
     */
    public String getMessage() {
        return message;
    }

    /**
     * 根据中文信息获取状态值
     *
     * @param message 中文状态
     * @return 状态值
     */
    public static int getStatusValueByMessage(String message) {
        StrategyStatusEnum[] strategyStatusEnums = StrategyStatusEnum.values();
        for (StrategyStatusEnum statusEnum : strategyStatusEnums) {
            if (statusEnum.message.equals(message)) {
                return statusEnum.getStatus();
            }
        }
        return UNKNOWN.getStatus();
    }


    @Override
    public boolean isValid(String value) {
        if (CharSequenceUtil.isEmpty(value)) {
            return false;
        }
        StrategyStatusEnum[] strategyStatusEnums = StrategyStatusEnum.values();
        for (StrategyStatusEnum statusEnum : strategyStatusEnums) {
            if (String.valueOf(statusEnum.getStatus()).equals(value)) {
                return true;
            }
        }
        return false;
    }
}
